06. 变量作用域

在编程时,你可能会经常产生相似的想法。在计数、迭代和累加返回值等过程中,你都需要使用变量。为了编写可读性更高的代码,你可能会针对相似变量使用相似的名称。在将多段代码放在一起时(例如,单个脚本中的多个函数或函数调用),你可能会发现两个不同部分中的变量需要使用相同的名称。

幸运的是,你并不需要想出无数个新名称。你可以将变量名称保留在不同的作用域(Scope)内,即可重复使用对象的名称。作用域是指变量可以被引用的程序部分。

如果变量是在函数内被创建的,则只能在该函数内使用此变量。

现在我们来看看下面两个函数 word_count nearest_square 。这两个函数都包含一个 answer 变量,但它们只存在在各自的函数中。

def word_count(document, search_term):
    """ Count how many times search_term appears in document. """
    words = document.split()    
    answer = 0
    for word in words:
        if word == search_term:
            answer += 1
    return answer

def nearest_square(limit):
    """ Find the largest square number smaller than limit. """
    answer = 0
    while (answer+1)**2 < limit:
        answer += 1
    return answer**2

最好的做法是在所需的最小作用域内定义变量。虽然函数 可以 引用更大范围内定义的变量,但这并不是个好主意。

阅读以下代码段,

egg_count = 0

def buy_eggs():
    egg_count += 12 # purchase a dozen eggs

buy_eggs()

这段代码的运行结果是什么?如果不确定,请尝试在自己的计算机上运行!

SOLUTION: 发生错误